 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Logic;


namespace WinForm
{
    public partial class Form1 : Form
    {
        // Cоздание класса для производства объектов
        Factory Creator = new Factory();
        List<AbstractVegetable> Vegetables = new List<AbstractVegetable>();
        int count = 1;
  
       
        public Form1()
        {
            InitializeComponent();
 
        }

        public void ListOut()
        {
            listBox.Items.Clear();

            if (Vegetables.Count != 0)
            {
                listBox.Items.Add("Список");
                foreach (AbstractVegetable v in Vegetables)
                {
                    listBox.Items.Add(count + ") " + (v.inf));
                    count++;
                }
                count = 1;
            }
            else
                listBox.Items.Add("Список пуст.");
        }

        private void Add_button_Click(object sender, EventArgs e)
        {
            try
            {
                switch (comboBox1.SelectedItem.ToString())
                {
                    case "Боб":
                        {
                            AbstractVegetable tmp = Creator.CreateBob();
                            int calories = Convert.ToInt32(textBox2.Text);
                            int weight = Convert.ToInt32(textBox3.Text);
                            if (calories >= 0 && weight >= 0)
                            {
                                tmp.set_calories(calories);
                                tmp.set_weight(weight);
                                tmp.inf = "Боб с калорийностью " + tmp.get_calories() + " и весом " + tmp.get_weight();
                                Vegetables.Add(tmp);
                                listBox.Items.Clear();
                                ListOut();
                                Message_label.Text = "Вы добавили в салат новый Боб";
                            }
                            else
                            {
                                Message_label.Text = "Неверное значение параметров.";
                            }
                        }
                        break;
                    case "Топинамбур":
                        {
                            AbstractVegetable tmp = Creator.CreateJA();
                            int calories = Convert.ToInt32(textBox2.Text);
                            int weight = Convert.ToInt32(textBox3.Text);
                            if (calories >= 0 && weight >= 0)
                            {
                                tmp.set_calories(calories);
                                tmp.set_weight(weight);
                                tmp.inf = "Топинамбур с калорийностью " + tmp.get_calories() + " и весом " + tmp.get_weight();
                                Vegetables.Add(tmp);
                                listBox.Items.Clear();
                                ListOut();
                                Message_label.Text = "Вы добавили в салат новый Топинамбур";
                            }
                            else
                            {
                                Message_label.Text = "Неверное значение параметров.";
                            }
                            break;
                        }
                    case "Лучок":
                        {
                            AbstractVegetable tmp = Creator.CreateOnion();
                            int calories = Convert.ToInt32(textBox2.Text);
                            int weight = Convert.ToInt32(textBox3.Text);
                            if (calories >= 0 && weight >= 0)
                            {
                                tmp.set_calories(calories);
                                tmp.set_weight(weight);
                                tmp.inf = "Лучок с калорийностью " + tmp.get_calories() + " и весом " + tmp.get_weight();
                                Vegetables.Add(tmp);
                                listBox.Items.Clear();
                                ListOut();
                                Message_label.Text = "Вы добавили в салат новый Лучок";
                            }
                            else
                            {
                                Message_label.Text = "Неверное значение параметров.";
                            }
                            break;
                        }
                    case "Горошек":
                        {
                            AbstractVegetable tmp = Creator.CreatePeas();
                            int calories = Convert.ToInt32(textBox2.Text);
                            int weight = Convert.ToInt32(textBox3.Text);
                            if (calories >= 0 && weight >= 0)
                            {
                                tmp.set_calories(calories);
                                tmp.set_weight(weight);
                                tmp.inf = "Горошек с калорийностью " + tmp.get_calories() + " и весом " + tmp.get_weight();
                                Vegetables.Add(tmp);
                                listBox.Items.Clear();
                                ListOut();
                                Message_label.Text = "Вы добавили в салат новый Горошек";
                            }
                            else
                            {
                                Message_label.Text = "Неверное значение параметров.";
                            }
                            break;
                        }
                    case "Картофель":
                        {
                            AbstractVegetable tmp = Creator.CreateBob();
                            int calories = Convert.ToInt32(textBox2.Text);
                            int weight = Convert.ToInt32(textBox3.Text);
                            if (calories >= 0 && weight >= 0)
                            {
                                tmp.set_calories(calories);
                                tmp.set_weight(weight);
                                tmp.inf = "Картофель с калорийностью " + tmp.get_calories() + " и весом " + tmp.get_weight();
                                Vegetables.Add(tmp);
                                listBox.Items.Clear();
                                ListOut();
                                Message_label.Text = "Вы добавили в салат новый Картофель";
                            }
                            else
                            {
                                Message_label.Text = "Неверное значение параметров.";
                            }
                            break;
                        }
                    default:
                        break;
                }
            }
            catch (Exception)
            {
                Message_label.Text = "Ошибка! ";
            }
        }

        private void Delete_button_Click(object sender, EventArgs e)
        {
            try
            {
                Vegetables.RemoveAt(Convert.ToInt32(textBox1.Text) - 1);
                ListOut();
                Message_label.Text = "Вы удалили элемент, теперь список выглядит так.";
            }
            catch (Exception)
            {
                Message_label.Text = "Введите корректное значение. ";
            }
        }

        private void DeleteAll_button_Click(object sender, EventArgs e)
        {
            if (Vegetables.Count > 0)
            {
                Vegetables.Clear();
                ListOut();
                Message_label.Text = "Вы удалили все элементы списка.";
            }
            else
                Message_label.Text = "Список уже пуст.";
        }

        private void Out_button_Click(object sender, EventArgs e)
        {
            if (Vegetables.Count > 0)
            {
                ListOut();
                Message_label.Text = "Список выведен.";
            }
            else
                Message_label.Text = "Список пуст.";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox.Items.Clear();
            listBox.Items.Add("Общая калорийность салата: ");
            int q = 0; 
            foreach (AbstractVegetable v in Vegetables)
            {
                q += v.get_calories();
            }
            listBox.Items.Add(q + " калорий.");
            Message_label.Text = "Вы посчитали калорийность салата.";
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void label2_Click_1(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }
    }

}
